package org.sysdance.aplicativo.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;

import org.sysdance.aplicativo.entidade.Cidade;
import org.sysdance.aplicativo.excecao.ConexaoException;
import org.sysdance.aplicativo.integracao.CidadeIntegracao;
import org.sysdance.aplicativo.util.ConexaoUtil;
import org.sysdance.aplicativo.util.ResultSetUtil;
import org.sysdance.aplicativo.util.SysDanceUtil;

public class CidadeDAO implements CidadeIntegracao {

	@Override
	public ArrayList<Cidade> consultarCidadesPorIdEstado(Integer idEstado) {
		final StringBuilder sql = new StringBuilder();
        sql.append("SELECT id_cidade,nm_cidade ");
        sql.append("FROM cidade WHERE id_estado=?;");
        try {
            final Connection conexao = ConexaoUtil.criarNovaConexao();
            final PreparedStatement ps = conexao.prepareStatement(sql.toString());
            ps.setInt(1, idEstado);
            final ResultSet rs = ps.executeQuery();
            final Collection<Cidade> resultado = new LinkedList<Cidade>();
            while(rs.next()){
                final Cidade cidade = new Cidade();
                cidade.setIdCidade(rs.getInt("id_cidade"));
                cidade.setNmCidade(rs.getString("nm_cidade"));
                resultado.add(cidade);
            }
            return new ArrayList<Cidade>(resultado);
        } catch (final ConexaoException ex) {
            SysDanceUtil.getInstancia().imprimirLog(ex);
        } catch (final SQLException sqlex) {
            SysDanceUtil.getInstancia().imprimirLog(sqlex);
        }finally{
        	try {
				ConexaoUtil.fecharConexao();
			} catch (ConexaoException e) {
				SysDanceUtil.getInstancia().imprimirLog(e);
			}
        }
        return new ArrayList<Cidade>();
	}
	
	@Override
	public Cidade consultarCidade(Integer idCidade) {
		final StringBuilder sql = new StringBuilder();
        sql.append("SELECT * FROM cidade ");
        sql.append("WHERE id_cidade=?;");
        try {
            final Connection conexao = ConexaoUtil.criarNovaConexao();
            final PreparedStatement ps = conexao.prepareStatement(sql.toString());
            ps.setInt(1, idCidade);
            ps.executeQuery();
            return ResultSetUtil.extrairUnicoRegistro(ps.executeQuery(), Cidade.class);
        } catch (final ConexaoException ex) {
            SysDanceUtil.getInstancia().imprimirLog(ex);
        } catch (final SQLException sqlex) {
            SysDanceUtil.getInstancia().imprimirLog(sqlex);
        }finally{
        	try {
				ConexaoUtil.fecharConexao();
			} catch (ConexaoException e) {
				SysDanceUtil.getInstancia().imprimirLog(e);
			}
        }
        return new Cidade();
	}

}
